package com.gitee.chessboard.utils;

import java.nio.file.FileSystems;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;

/**
 * 路径工具类
 *
 * @author 敲代码的旺财
 * @date 2021/12/7 16:46
 */
public class PathUtils {


    /**
     * 判断是否是一个通配符路径
     *
     * @param path 路径
     * @return 是否是通配符路径
     */
    public static boolean isPatternPath(String path) {
        if (path == null) {
            return false;
        }
        boolean uriVar = false;
        for (int i = 0; i < path.length(); i++) {
            char c = path.charAt(i);
            if (c == '*' || c == '?') {
                return true;
            }
            if (c == '{') {
                uriVar = true;
                continue;
            }
            if (c == '}' && uriVar) {
                return true;
            }
        }
        return false;
    }

    /**
     * 获取路径对象的明确前缀
     * 也就是通配符之前的明确的那一部分的路径
     * /WEB-INF/*.xml为例，/WEB-INF/就是前缀部分
     *
     * @param path 通配符路径
     * @return 前缀路径
     */
    public static String getDeterminePrefixPath(String path) {
        int prefixEnd = path.indexOf(':') + 1;
        int rootDirEnd = path.length();
        while (rootDirEnd > prefixEnd && PathUtils.isPatternPath(path.substring(prefixEnd, rootDirEnd))) {
            rootDirEnd = path.lastIndexOf('/', rootDirEnd - 2) + 1;
        }
        if (rootDirEnd == 0) {
            rootDirEnd = prefixEnd;
        }
        return path.substring(0, rootDirEnd);
    }

    /**
     * 匹配通配符的路径是否正确
     * @param pattern 通配符
     * @param path 路径地址
     * @return 是否匹配
     */
    public static boolean match(String pattern, String path) {
        //match可能会有问题  在网上找到的
        PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
        return matcher.matches(Paths.get(path));
    }

}
